package Vue;
import java.awt.BorderLayout;
import java.awt.Graphics2D;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;

import javax.swing.BorderFactory;
import javax.swing.BoxLayout;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.JToolBar;

import Controleur.Controleur;

/**
 * Cette class permet de définir la barre d'options pour l'application.
 * 
 * @author Kilian Cousein et Benjamin Tardieu
 */
public class BarreOption extends JToolBar implements ActionListener
{
//======================================================================//
//============================ Variables ===============================//
//======================================================================//
	
	private Controleur controleur;
	
	private JButton nouveau = new JButton(new ImageIcon("icon/filenew.png"));
	private JButton enregistrer = new JButton(new ImageIcon("icon/filesave.png"));
	private JButton enregistrerSous = new JButton(new ImageIcon("icon/filesaveas.png"));
	private JButton ouvrir = new JButton(new ImageIcon("icon/fileopen.png"));
	private JButton imprimer = new JButton(new ImageIcon("icon/printer.png"));
	
	private JButton annuler = new JButton(new ImageIcon("icon/undo.png"));
	private JButton retablir = new JButton(new ImageIcon("icon/redo.png"));
	
	private JButton copier = new JButton(new ImageIcon("icon/copier.png"));
	private JButton couper = new JButton(new ImageIcon("icon/couper.png"));
	private JButton coller = new JButton(new ImageIcon("icon/coller.png"));
	
	private JButton zoomIn = new JButton(new ImageIcon("icon/zoom_in.png"));
	private JButton zoomOut = new JButton(new ImageIcon("icon/zoom_out.png"));
    
	
//======================================================================//
//========================== Constructeurs =============================//
//======================================================================//
		
	/**
	 * Crée une nouvelle instance de <i>BarreOption</i>.
	 *
	 * @param controleur
	 */
    public BarreOption(Controleur controleur)
    {
    	this.controleur = controleur;
    	
    	JPanel panneau1 = new JPanel();
    	panneau1.setBorder(BorderFactory.createEmptyBorder(4, 4, 4, 4));
    	
    	this.nouveau.setName("nouveau");
    	this.nouveau.addActionListener(this);
    	panneau1.add(nouveau);
    	
    	this.ouvrir.setName("ouvrir");
    	this.ouvrir.addActionListener(this);
    	panneau1.add(ouvrir);
    	
    	this.enregistrer.setName("sauvegarder");
    	this.enregistrer.addActionListener(this);
    	this.enregistrer.setEnabled(false);
    	panneau1.add(enregistrer);
    	
    	this.enregistrerSous.setName("sauvegarderSous");
    	this.enregistrerSous.addActionListener(this);
    	panneau1.add(enregistrerSous);
    	
    	this.imprimer.setName("imprimer");
    	this.imprimer.addActionListener(this);
    	panneau1.add(imprimer);
  
    	panneau1.setLayout(new BoxLayout(panneau1, BoxLayout.X_AXIS));
    	this.add(panneau1);

    	
    	JPanel panneau2 = new JPanel();
    	panneau2.setBorder(BorderFactory.createEmptyBorder(4, 4, 4, 4));
    	
    	this.annuler.setName("annuler");
    	this.annuler.addActionListener(this);
    	this.annuler.setEnabled(false);
    	panneau2.add(annuler);
    	
    	this.retablir.setName("retablir");
    	this.retablir.addActionListener(this);
    	this.retablir.setEnabled(false);
    	panneau2.add(retablir);
    	
    	this.add(panneau2);
    	panneau2.setLayout(new BoxLayout(panneau2, BoxLayout.X_AXIS));

    	JPanel panneau3 = new JPanel();
    	panneau3.setBorder(BorderFactory.createEmptyBorder(4, 4, 4, 4));
    	panneau3.add(copier);
    	panneau3.add(couper);
    	panneau3.add(coller);
    	this.add(panneau3);
    	panneau3.setLayout(new BoxLayout(panneau3, BoxLayout.X_AXIS));
    	
    	JPanel panneau4 = new JPanel();
    	panneau4.setBorder(BorderFactory.createEmptyBorder(4, 4, 4, 4));
    	
    	this.copier.setName("copier");
    	this.copier.addActionListener(this);
    	
    	this.couper.setName("couper");
    	this.couper.addActionListener(this);
    	
    	this.coller.setName("coller");
    	this.coller.addActionListener(this);
    	this.coller.setEnabled(false);
 
    	
    	
    	this.zoomOut.setName("zoomOut");
    	zoomOut.setEnabled(false);
    	this.zoomOut.addActionListener(this);
    	panneau4.add(zoomOut);
    	
    	this.zoomIn.setName("zoomIn");
    	this.zoomIn.addActionListener(this);
    	panneau4.add(zoomIn);
    	
    	this.add(panneau4);
    	panneau4.setLayout(new BoxLayout(panneau4, BoxLayout.X_AXIS));
    }
    
    
//======================================================================//
//============================= Méthodes ===============================//
//======================================================================//
    
    
    /**
     * Cette méthode permet de désactiver le bouton pour enregistrer un dessin.
     */
    public void desactiverEnregistrement()
	{
		this.enregistrer.setEnabled(false);
	}
    
    
    /**
     * Cette méthode permet de activer le bouton pour enregistrer un dessin.
     */
    public void activerEnregistrement()
	{
		this.enregistrer.setEnabled(true);
	}
    
    
    /**
     * Cette méthode permet de désactiver le bouton pour annuler un évènement.
     */
    public void desactiverAnnuler()
	{
		this.annuler.setEnabled(false);
	}
    
    
    /**
     * Cette méthode permet de activer le bouton pour annuler un évènement.
     */
    public void activerAnnuler()
	{
		this.annuler.setEnabled(true);
	}
    
    
    /**
     * Cette méthode permet de désactiver le bouton pour rétablir un évènement.
     */
    public void desactiverRetablir()
	{
		this.retablir.setEnabled(false);
	}
    
    
    /**
     * Cette méthode permet de activer le bouton pour rétablir un évènement.
     */
    public void activerRetablir()
	{
		this.retablir.setEnabled(true);
	}
    

//======================================================================//
//====================== Méthodes Implémentées= ========================//
//======================================================================//
    
	@Override
	public void actionPerformed(ActionEvent e)
	{
		JButton bouton = (JButton) e.getSource();
		
		if(bouton.getName() == "nouveau")
		{
			final JFrame fenetre = new JFrame("Nouneau");			
			GridLayout layout = new GridLayout(4, 3, 5, 5);
			JPanel panneau = new JPanel(layout);
			JLabel labelNom = new JLabel("Nom :");
			final JTextField fieldNom = new JTextField("Sans titre");
			JLabel labelLargeur = new JLabel("Largeur :");
			final JTextField fieldLargeur = new JTextField("800");
			JLabel labelHauteur = new JLabel("Hauteur :");
			final JTextField fieldHauteur = new JTextField("600");
			JButton boutonOk = new JButton("Ok");
			JButton boutonAnnuler = new JButton("Annuler");
			JLabel labelPixels1 = new JLabel("pixels");
			JLabel labelPixels2 = new JLabel("pixels");
			JLabel label1 = new JLabel("");
			JLabel label2 = new JLabel("");
			
			panneau.add(labelNom);
			panneau.add(fieldNom);
			panneau.add(label1);
			panneau.add(labelLargeur);
			panneau.add(fieldLargeur);
			panneau.add(labelPixels1);
			panneau.add(labelHauteur);
			panneau.add(fieldHauteur);
			panneau.add(labelPixels2);
			panneau.add(label2);
			panneau.add(boutonAnnuler);
			panneau.add(boutonOk);
	    	fenetre.add(panneau);
	    	
	    	panneau.setBorder(BorderFactory.createEmptyBorder(10, 25, 10, 25));  
			
			fenetre.setVisible(true);
			fenetre.pack();
		
			boutonAnnuler.addActionListener(new ActionListener()
			{
				@Override
				public void actionPerformed(ActionEvent e)
				{
					fenetre.dispose();
				}
			});
			
			boutonOk.addActionListener(new ActionListener()
			{
				@Override
				public void actionPerformed(ActionEvent e)
				{
					controleur.nouveauDessin(fieldNom.getText(), Integer.valueOf(fieldLargeur.getText()), Integer.valueOf(fieldHauteur.getText()));
					fenetre.dispose();
				}
			});
		}
		else if(bouton.getName() == "ouvrir")		
		{	
			this.controleur.ouvrir();
		}
		else if(bouton.getName() == "sauvegarder")
		{
			this.controleur.enregistrer();
		}
		else if(bouton.getName() == "sauvegarderSous")
		{
			this.controleur.enregistrerSous();
		}
		else if(bouton.getName() == "imprimer")
		{
			System.out.println("Inprimer");
		}
		else if(bouton.getName() == "annuler")
		{
			this.controleur.annuler();
		}
		else if(bouton.getName() == "retablir")
		{
			this.controleur.retablir();
		}
		else if(bouton.getName() == "zoomOut")
		{
			this.controleur.zoomOut();
			if(this.controleur.zoomCourant() == 1.0f)
				zoomOut.setEnabled(false);
		}
		else if(bouton.getName() == "zoomIn")
		{
			if(this.controleur.zoomCourant() == 1.0f)
				zoomOut.setEnabled(true);
			
			this.controleur.zoomIn();				
		}
		else if(bouton.getName() == "copier")
		{
			this.controleur.copier();
			coller.setEnabled(true);
		}
		else if(bouton.getName() == "couper")
		{
			this.controleur.couper();
			coller.setEnabled(true);
		}
		else if(bouton.getName() == "coller")
		{
			this.controleur.coller();				
		}
		else
		{
			System.out.println("BarOutils: Action non implémentée.");
		}
	}
	
	public void setEnabledColler(boolean b)
	{
		coller.setEnabled(b);
	}
}